######################################################
##
##  Forth Warrior:
##
##  An educational game about introductory Forth
##  programming, basic AI concepts and stabbing
##  things with swords.
##
##  John Earnest
##
######################################################

:const delay-time  19

:include <Print.fs>
:include <Util.fs>
:include <Sprites.fs>
:include <Grid.fs>

:image   grid-tiles   "warriorTiles.png"  8  8
:image         font           "text.png"  8  8
:image sprite-tiles "warriorSprites.png" 16 16

# directions
:const north 0
:const east  1
:const south 2
:const west  3

:data dir-x    0  1  0 -1
:data dir-y   -1  0  1  0

:data n "north"
:data e "east"
:data s "south"
:data w "west"
:data  dir-names n e s w
: .dir dir-names + @ type ;

# terrain types
:const empty  0
:const solid  1
:const stairs 2
:const gem    3
:const slime  4

######################################################
##
##  Level Data
##
######################################################

:data grid
:data l0
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  8  9  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  4  5  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2 24 25 16 17 16 17 16 17 16 17 16 17 16 17 16 17 16 17 20 21  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 

:data l1
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  2  2  6  7  6  7  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  2  2 22 23 22 23  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  2  2  0  1  4  5  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  2  2 16 17 20 21  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  2  2  0  1  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  2  2 16 17  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  2  2  0  1  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  2  2 16 17  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  2  2  2  2  2  2 -1 -1 -1 -1  2  2  0  1  6  7  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  2  2  2  2  2  2 -1 -1 -1 -1  2  2 16 17 22 23  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2  6  7  2  2  2  2  2  2  2  2  0  1 10 11  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2 22 23  2  2  2  2  2  2  2  2 16 17 26 27  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  6  7  6  7  6  7  6  7 10 11  6  7  6  7  6  7  6  7  0  1  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2 22 23 22 23 22 23 22 23 26 27 22 23 22 23 22 23 22 23 16 17  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  8  9  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2 24 25 16 17 16 17 16 17 16 17 16 17 16 17 16 17 16 17 16 17  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 


:data l2
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1  2  2  6  7  6  7  6  7  6  7  6  7  2  2  2  2  6  7  6  7  6  7  6  7  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1  2  2 22 23 22 23 22 23 22 23 22 23  2  2  2  2 22 23 22 23 22 23 22 23  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1  2  2  8  9  0  1  0  1  0  1  0  1  2  2  2  2  0  1  0  1 10 11  0  1  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1  2  2 24 25 16 17 16 17 16 17 16 17  2  2  2  2 16 17 16 17 26 27 16 17  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2  0  1  2  2  2  2  0  1  2  2  2  2  0  1  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 
	-1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2 16 17  2  2  2  2 16 17  2  2  2  2 16 17  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  2  2  0  1  6  7  6  7  0  1  2  2  2  2  0  1  6  7  6  7  6  7  2  2 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  2  2 16 17 22 23 22 23 16 17  2  2  2  2 16 17 22 23 22 23 22 23  2  2 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  2  2  0  1  0  1 10 11  0  1  2  2  2  2  0  1  0  1  0  1  4  5  2  2 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  2  2 16 17 16 17 26 27 16 17  2  2  2  2 16 17 16 17 16 17 20 21  2  2 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 

:data l3
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1  2  2  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1  2  2 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1  2  2  8  9  0  1  0  1  0  1  0  1  0  1  0  1  0  1 10 11  0  1  0  1  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1  2  2 24 25 16 17 16 17 16 17 16 17 16 17 16 17 16 17 26 27 16 17 16 17  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1  2  2  2  2  0  1 10 11  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1  2  2  2  2 16 17 26 27 16 17 16 17 16 17 16 17 16 17 16 17 16 17 16 17  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  0  1  0  1  0  1 10 11  0  1  0  1  0  1  0  1  0  1  0  1  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2 16 17 16 17 16 17 26 27 16 17 16 17 16 17 16 17 16 17 16 17  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  0  1  0  1  0  1  0  1  0  1  0  1 10 11  0  1  0  1  0  1  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2 16 17 16 17 16 17 16 17 16 17 16 17 26 27 16 17 16 17 16 17  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  0  1  0  1 10 11  0  1  0  1  0  1  0  1  0  1  0  1 10 11  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2 16 17 16 17 26 27 16 17 16 17 16 17 16 17 16 17 16 17 26 27  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  6  7  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2 16 17 16 17 16 17 16 17 16 17 16 17 16 17 16 17 16 17 16 17 22 23  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  0  1  0  1  0  1  0  1 10 11  0  1  0  1  0  1  0  1  0  1  4  5  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2 16 17 16 17 16 17 16 17 26 27 16 17 16 17 16 17 16 17 16 17 20 21  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 

:data l4
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  8  9  0  1  0  1  0  1 12 13  0  1 12 13  0  1  0  1  4  5  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2 24 25 16 17 16 17 16 17 28 29 16 17 28 29 16 17 16 17 20 21  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 

:data l5
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1  2  2  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  2  2 -1 -1 -1 
	-1 -1  2  2 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23  2  2 -1 -1 -1 
	-1 -1  2  2  8  9  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1 12 13  2  2 -1 -1 -1 
	-1 -1  2  2 24 25 16 17 16 17 16 17 16 17 16 17 16 17 16 17 16 17 16 17 16 17 16 17 16 17 16 17 16 17 28 29  2  2 -1 -1 -1 
	-1 -1  2  2  2  2  2  2  2  2  0  1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  0  1  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1  2  2  2  2  2  2  2  2 16 17  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 16 17  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2 10 11  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  2  2 10 11  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2 26 27  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  2  2 26 27  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  0  1  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  2  2  0  1  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2 16 17  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1  2  2 16 17  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1  2  2  2  2  2  2  2  2 10 11  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 10 11  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1  2  2  2  2  2  2  2  2 26 27  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 26 27  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1  2  2  6  7  6  7  6  7  0  1  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  0  1  6  7  6  7  6  7  2  2 -1 -1 -1 
	-1 -1  2  2 22 23 22 23 22 23 16 17 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 16 17 22 23 22 23 22 23  2  2 -1 -1 -1 
	-1 -1  2  2 12 13  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  4  5  2  2 -1 -1 -1 
	-1 -1  2  2 28 29 16 17 16 17 16 17 16 17 16 17 16 17 16 17 16 17 16 17 16 17 16 17 16 17 16 17 16 17 20 21  2  2 -1 -1 -1 
	-1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 

:data l6
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1  2  2  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  2  2 -1 -1 -1 
	-1 -1  2  2 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23  2  2 -1 -1 -1 
	-1 -1  2  2  8  9  0  1  0  1  0  1  0  1 12 13  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  2  2 -1 -1 -1 
	-1 -1  2  2 24 25 16 17 16 17 16 17 16 17 28 29 16 17 16 17 16 17 16 17 16 17 16 17 16 17 16 17 16 17 16 17  2  2 -1 -1 -1 
	-1 -1  2  2  0  1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  0  1  2  2  2  2  2  2  2  2  2  2  2  2  0  1  2  2 -1 -1 -1 
	-1 -1  2  2 16 17  2  2  2  2  2  2  2  2  2  2  2  2  2  2 16 17  2  2  2  2  2  2  2  2  2  2  2  2 16 17  2  2 -1 -1 -1 
	-1 -1  2  2  0  1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  0  1  2  2  2  2  2  2  2  2  2  2  2  2  0  1  2  2 -1 -1 -1 
	-1 -1  2  2 16 17  2  2  2  2  2  2  2  2  2  2  2  2  2  2 16 17  2  2  2  2  2  2  2  2  2  2  2  2 16 17  2  2 -1 -1 -1 
	-1 -1  2  2  0  1  6  7  6  7  6  7  6  7  6  7  6  7  6  7  0  1  2  2  2  2  6  7  6  7  2  2  6  7 12 13  2  2 -1 -1 -1 
	-1 -1  2  2 16 17 22 23 22 23 22 23 22 23 22 23 22 23 22 23 16 17  2  2  2  2 22 23 22 23  2  2 22 23 28 29  2  2 -1 -1 -1 
	-1 -1  2  2 10 11  0  1  0  1  0  1  0  1  0  1  0  1  0  1 10 11  2  2  2  2  0  1  4  5  2  2 10 11  0  1  2  2 -1 -1 -1 
	-1 -1  2  2 26 27 16 17 16 17 16 17 16 17 16 17 16 17 16 17 26 27  2  2  2  2 16 17 20 21  2  2 26 27 16 17  2  2 -1 -1 -1 
	-1 -1  2  2  2  2  2  2  2  2  0  1  2  2  2  2 10 11  2  2  2  2  2  2  2  2  0  1  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1  2  2  2  2  2  2  2  2 16 17  2  2  2  2 26 27  2  2  2  2  2  2  2  2 16 17  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1  2  2  2  2  2  2  2  2  0  1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  0  1  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1  2  2  2  2  2  2  2  2 16 17  2  2  2  2  2  2  2  2  2  2  2  2  2  2 16 17  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1  2  2  6  7  6  7  6  7  0  1  6  7  6  7  6  7  6  7  6  7  6  7  6  7  0  1  6  7  6  7  6  7  6  7  2  2 -1 -1 -1 
	-1 -1  2  2 22 23 22 23 22 23 16 17 22 23 22 23 22 23 22 23 22 23 22 23 22 23 16 17 22 23 22 23 22 23 22 23  2  2 -1 -1 -1 
	-1 -1  2  2 10 11  0  1  0  1  0  1  0  1 12 13  0  1  0  1  0  1 12 13  0  1  0  1  0  1  0  1  0  1 10 11  2  2 -1 -1 -1 
	-1 -1  2  2 26 27 16 17 16 17 16 17 16 17 28 29 16 17 16 17 16 17 28 29 16 17 16 17 16 17 16 17 16 17 26 27  2  2 -1 -1 -1 
	-1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 

:data l7
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1  2  2  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1  2  2 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1  2  2  8  9  0  1  0  1  0  1  0  1  0  1 12 13  0  1 10 11  0  1  0  1  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1  2  2 24 25 16 17 16 17 16 17 16 17 16 17 28 29 16 17 26 27 16 17 16 17  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1  2  2  2  2  0  1 10 11  0  1  0  1  0  1  0  1  0  1  0  1  0  1  0  1  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1  2  2  2  2 16 17 26 27 16 17 16 17 16 17 16 17 16 17 16 17 16 17 12 13  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  0  1  0  1  0  1 10 11  0  1 12 13  0  1  0  1  0  1 28 29  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2 16 17 16 17 16 17 26 27 16 17 28 29 16 17 16 17 16 17 16 17  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2 12 13  0  1  0  1  0  1  0  1  0  1 10 11  0  1  0  1  0  1  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2 28 29 16 17 16 17 16 17 16 17 16 17 26 27 16 17 16 17 16 17  2  2 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  0  1  0  1 10 11  0  1  0  1  0  1  0  1  0  1  0  1 10 11  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2 16 17 16 17 26 27 16 17 16 17 16 17 16 17 16 17 16 17 26 27  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  0  1  0  1  0  1 12 13  0  1  0  1  0  1 12 13  0  1  0  1  6  7  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2 16 17 16 17 16 17 28 29 16 17 16 17 16 17 28 29 16 17 16 17 22 23  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2 12 13  0  1  0  1  0  1 10 11  0  1  0  1  0  1 12 13  0  1  4  5  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2 28 29 16 17 16 17 16 17 26 27 16 17 16 17 16 17 28 29 16 17 20 21  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 

:data l8
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1  2  2  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  2  2 -1 -1 -1 
	-1 -1  2  2 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23  2  2 -1 -1 -1 
	-1 -1  2  2  8  9  0  1  0  1  0  1 12 13  0  1 12 13  0  1 12 13  0  1 12 13  0  1 12 13  0  1  0  1 10 11  2  2 -1 -1 -1 
	-1 -1  2  2 24 25 16 17 16 17 16 17 28 29 16 17 28 29 16 17 28 29 16 17 28 29 16 17 28 29 16 17 16 17 26 27  2  2 -1 -1 -1 
	-1 -1  2  2  0  1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  0  1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1  2  2 16 17  2  2  2  2  2  2  2  2  2  2  2  2  2  2 16 17  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1  2  2  0  1  6  7  6  7  6  7  6  7  6  7  6  7  6  7  0  1  6  7  6  7  6  7  6  7  6  7  6  7  6  7  2  2 -1 -1 -1 
	-1 -1  2  2 16 17 22 23 22 23 22 23 22 23 22 23 22 23 22 23 16 17 22 23 22 23 22 23 22 23 22 23 22 23 22 23  2  2 -1 -1 -1 
	-1 -1  2  2 10 11  0  1 12 13  0  1 12 13  0  1 12 13  0  1 12 13  0  1 12 13  0  1  0  1  0  1  0  1 10 11  2  2 -1 -1 -1 
	-1 -1  2  2 26 27 16 17 28 29 16 17 28 29 16 17 28 29 16 17 28 29 16 17 28 29 16 17 16 17 16 17 16 17 26 27  2  2 -1 -1 -1 
	-1 -1  2  2  2  2  2  2  2  2  0  1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1  2  2  2  2  2  2  2  2 16 17  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1  2  2  6  7  6  7  6  7  0  1  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  2  2 -1 -1 -1 
	-1 -1  2  2 22 23 22 23 22 23 16 17 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23  2  2 -1 -1 -1 
	-1 -1  2  2 10 11  0  1  0  1  0  1  0  1 12 13  0  1 12 13  0  1 12 13  0  1 12 13  0  1 12 13  0  1 10 11  2  2 -1 -1 -1 
	-1 -1  2  2 26 27 16 17 16 17 16 17 16 17 28 29 16 17 28 29 16 17 28 29 16 17 28 29 16 17 28 29 16 17 26 27  2  2 -1 -1 -1 
	-1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  0  1  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 16 17  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1  2  2  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  6  7  0  1  6  7  6  7  6  7  6  7  2  2 -1 -1 -1 
	-1 -1  2  2 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 22 23 16 17 22 23 22 23 22 23 22 23  2  2 -1 -1 -1 
	-1 -1  2  2  4  5  0  1 12 13  0  1 12 13  0  1 12 13  0  1 12 13  0  1 12 13  0  1  0  1  0  1  0  1 10 11  2  2 -1 -1 -1 
	-1 -1  2  2 20 21 16 17 28 29 16 17 28 29 16 17 28 29 16 17 28 29 16 17 28 29 16 17 16 17 16 17 16 17 26 27  2  2 -1 -1 -1 
	-1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2  2 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 
	-1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 -1 

:data levels l0 l1 l2 l3 l4 l5 l6 l7 l8
:const max-level 8

######################################################
##
##  Sprite Management
##
######################################################

:const player 32
:const icon   201

: alloc-sprite ( tile x y -- )
	32 for
		i sprite@ @ -if
			>r >r >r 16x16 r> r> r> r>
			>sprite exit
		then
	next
;

: free-sprites ( -- )
	32 for 0 i sprite@ ! next
;

######################################################
##
##  Game Simulation
##
######################################################

:proto tick
:proto level

:var move-dir
:var move-action
:var curr-level
:var player-hp
:var walk-counter
:var score
:var steps
:var looks
:var kills
:var spares

: show-hp ( -- )
	2 for
		i 1 + player-hp @ >
		if 35 else 36 then
		38 i - 1 tile-grid@ !
	next
;

: wait
	delay-time for sync next
;

: stop
	show-hp
	1 28 "press any key..." grid-type
	"  Final Score:   " type score  @ . cr
	"  Steps taken:   " type steps  @ . cr
	"  Observations:  " type looks  @ . cr
	"  Slimes killed: " type kills  @ . cr
	"  Slimes spared: " type spares @ . cr
	loop keys if halt then sync again
;


: check-dir ( dir -- dir )
	0 over 3 within -if
		"Invalid direction: " type . cr stop
	then
;

: sprite-in-dir ( dir src -- id )
	>r check-dir
	dup  dir-x + @ 16 * i  px +
	swap dir-y + @ 16 * r> py +
	32 for
		2dup i py = swap i px = and
		i sprite@ @ 0! and if
			2drop r> exit
		then
	next
	2drop 33
;

: tile-in-dir ( dir src -- tile )
	>r check-dir
	dup  dir-x + @ 16 * i  px +
	swap dir-y + @ 16 * r> py +
	pixel-grid@ @
;

: show-dir ( tile dir -- )
	>r 16x16 swap
	i  dir-x + @ 16 * player px +
	r> dir-y + @ 16 * player py +
	icon >sprite wait icon hide
;

: init-level ( level -- )
	3 player-hp !
	0 walk-counter !
	dup curr-level !
	"Entered level " type dup . cr
	free-sprites
	levels + @ GP !
	1 1 "LEVEL" grid-type
	7 1 curr-level @ draw-number
	show-hp
	16x16 0 0 0 player >sprite
	20 for
		15 for
			j 2 * i 2 * tile-grid@ @
			dup 8 = if
				j 16 * player px!
				i 16 * player py!
			then
			dup 10 = if
				2 j 16 * i 16 * alloc-sprite
			then
			dup 12 = if
				3 j 16 * i 16 * alloc-sprite
				spares inc@
			then
			drop
		next
	next
	curr-level @ level
;

: no-action
	"No action specified." typeln stop
;

: walkable? ( tile -- flag )
	dup   0 =
	over  8 = or
	over 10 = or
	swap 12 = or
;

: make-walk
	move-dir @ player sprite-in-dir tile
	3 = if
		drop
		drop 0 player sprite@ !
		"Devoured via stepping on a slime." typeln
		stop
	then
	move-dir @ player tile-in-dir
	dup walkable? if
		drop
		move-dir @ dir-x + @ 16 * player px + player px!
		move-dir @ dir-y + @ 16 * player py + player py!
		"Walked " type move-dir @ .dir "." typeln
		walk-counter inc@
		walk-counter @ 4 >= if
			player-hp @ 3 < if
				player-hp inc@
				"Walked it off. ( HP is now " type player-hp @ . ")" typeln
			then
			0 walk-counter !
		then
		exit
	then
	dup 4 = if
		drop
		0 player sprite@ !
		curr-level @ max-level = if
			"Completed the dungeon!" typeln stop
		then
		"Descended the stairs..." typeln
		3 for wait next
		curr-level @ 1 + init-level
		3 for wait next
		exit
	then
	drop
	"Cannot walk " type move-dir @ .dir "." typeln stop
;

: make-take
	move-dir @ player sprite-in-dir tile
	dup 2 = if
		drop 0 move-dir @ player sprite-in-dir sprite@ !
		1 player tile! wait 6 0 show-dir 0 player tile!
		score @ 10 + score !
		"Picked up gem to the " type move-dir @ .dir "." typeln
		"( Score is now " type score @ . ")" typeln
		exit
	then
	drop
	"There's nothing " type move-dir @ .dir " to take." typeln stop
;

: make-attack
	move-dir @ player sprite-in-dir tile
	dup 3 = if
		5 move-dir @ show-dir
		drop 0 move-dir @ player sprite-in-dir sprite@ !
		kills  inc@
		spares dec@
		"Killed slime to the " type move-dir @ .dir "." typeln
		"Sprayed with acid from the dying slime." type
		player-hp dec@
		player-hp @ -if " Died in burning agony!" typeln stop then
		" ( HP is now " type player-hp @ . ")" typeln
		exit
	then
	drop
	"There's nothing " type move-dir @ .dir " to attack." typeln stop
;

: move-slimes ( -- )
	32 for
		i tile 3 = i sprite@ @ and if
			4 random
			dup  i sprite-in-dir 33 =
			over i tile-in-dir walkable? and
			if
				dup dir-x + @ 16 * i px + i px!
				    dir-y + @ 16 * i py + i py!
			else drop then
		then
	next
;

:var old-stack
: main
	0 ascii !
	start-level init-level
	loop
		wait
		' no-action move-action !
		DP @ old-stack !
		tick
		DP @ old-stack @ 2dup
		> if "Stack overflow detected!"  typeln stop then
		< if "Stack underflow detected!" typeln stop then
		steps inc@ move-action @ exec
		move-slimes show-hp
	again
;

######################################################
##
##  Controller API
##
######################################################

: walk   move-dir ! ' make-walk   move-action ! ; ( dir -- )
: take   move-dir ! ' make-take   move-action ! ; ( dir -- )
: attack move-dir ! ' make-attack move-action ! ; ( dir -- )

: look ( dir -- type )
	looks inc@
	4 over show-dir
	dup player sprite-in-dir tile
	dup 2 = if 2drop gem   exit then
	    3 = if  drop slime exit then
	player tile-in-dir
	dup walkable? if drop empty  exit then
	    4 =       if      stairs exit then
	solid
;

: listen ( -- count )
	looks inc@
	0 32 for
		i tile 3 = i sprite@ @ and
		if 1 + then
	next
;

: health ( -- n )
	player-hp @
;